/*
 *
 * (c) Copyright Ascensio System Limited 2010-2023
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
*/


using System;

namespace ASC.Notify.Patterns
{
    public sealed class ReplacePatternFormatter : PatternFormatter
    {
        public const string DefaultPattern = @"[[]%(?<tagName>[a-zA-Z0-9_\-.]+)%[]]";

        public ReplacePatternFormatter()
            : base(DefaultPattern)
        {
        }

        internal ReplacePatternFormatter(string tagPattern, bool formatMessage)
            : base(tagPattern, formatMessage)
        {
        }

        protected override string FormatText(string text, ITagValue[] tagsValues)
        {
            if (String.IsNullOrEmpty(text)) return text;

            var formattedText = RegEx.Replace(text,
                match =>
                {
                    var value = Array.Find(tagsValues, v => v.Tag == match.Groups["tagName"].Value);
                    return value != null && value.Value != null ? Convert.ToString(value.Value) : match.Value;
                });
            return formattedText;
        }
    }
}
